<?php

Yii::import('application.modules.carta.models._base.BaseCartaNutricional');

/**
 * Modelo de la clase Carta Nutricional que extiende del Modelo BaseCartaNutricional
 * @author Sofia Mejia <asmejia@utn.edu.ec>
 */
class CartaNutricional extends BaseCartaNutricional {

    /**
     * @return CartaNutricional
     */
    public $edad;

    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public static function label($n = 1) {
        return Yii::t('app', 'Menú|Menús', $n);
    }

    public function relations() {
        return array_merge(parent::relations(), array(
            'manyNiniosCartaNutricionals' => array(self::MANY_MANY, 'Ninios', 'ninios_carta_nutricional(carta_nutricional_id,ninios_id)'),
        ));
    }

    public function attributeLabels() {
        return array(
            'id' => Yii::t('app', 'ID'),
            'nombre' => Yii::t('app', 'Nombre'),
            'descripcion' => Yii::t('app', 'Descripción'),
            'tipo_carta_id' => Yii::t('app', 'Tiempo de comida'),
            'edad' => Yii::t('app', 'Edades'),
            'cartaAlimentoses' => null,
            'tipoCarta' => null,
            'niniosCartaNutricionals' => null,
        );
    }

    public function rules() {
        return array_merge(array(
            array('nombre', 'unique'),
            array('id, nombre, descripcion, tipo_carta_id, edad', 'safe', 'on' => 'search'),
        ));
    }
    
    /**
     * funcion en donde se encuentran las columnas con el tipo de dato a ser 
     * buscado en la columna
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @return type
     */
    public function searchColumns() {
        return array(
            'descripcion:text',
            'nombre:text',
            'tipoCarta.nombre:number',
            'edades:number',
        );
    }

    /**
     * Funcion para search de Edatatable de cartaNutricional
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param array $columns
     * @return \CActiveDataProvider
     */
    public function search(array $columns = null) {
        $criteria = new CDbCriteria;
        $criteria->distinct = true;
//        $criteria->join = "inner  join carta_alimentos ON carta_alimentos.carta_nutricional_id=t.id ";
//        $criteria->join .= "inner  JOIN tipo_carta ON tipo_carta.id=t.tipo_carta_id ";
//        $criteria->join .= "inner join edades ON edades.id=carta_alimentos.edades_id "
        $criteria->with = array('cartaAlimentoses', 'tipoCarta', 'cartaAlimentoses.edades' => array('together' => false, 'select' => false));
        $criteria->together = true;
        $criteria->group = "t.id";

        if (isset($_GET['sSearch'])) {
            $criteria->compare('t.nombre', $_GET['sSearch'], true, 'OR');
            $criteria->compare('t.descripcion', $_GET['sSearch'], true, 'OR');
            $criteria->compare('tipoCarta.nombre', $_GET['sSearch'], true, 'OR');
            $criteria->compare('edades.tiempo', $_GET['sSearch'], true, 'OR');
        }
        if (isset($_GET['dropDownStatus']) && $_GET['dropDownStatus'] != 'empty') {
            $criteria->params = array(':edades_id' => $_GET['dropDownStatus']);
            $criteria->condition = 'edades.id= :edades_id';
        }

        $criteria->compare('t.nombre', $this->nombre, true, 'OR');
        $criteria->compare('t.descripcion', $this->descripcion, true, 'OR');
        $criteria->compare('tipoCarta.nombre', $this->tipo_carta_id, true, 'OR');
        $criteria->compare('edades.tiempo', $this->edad, true, 'OR');

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'sort' => new EDTSort(__CLASS__, $columns),
            'pagination' => new EDTPagination,
        ));
    }

    /**
     * Search para gridview de cartaNutricional
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @return \CActiveDataProvider
     */
    public function searchGridView($select = false) {
        $criteria = new CDbCriteria;
        $criteria->with = array('cartaAlimentoses', 'tipoCarta', 'cartaAlimentoses.edades' => array('together' => false, 'select' => false));
        $criteria->together = true;
        $criteria->group = "t.id";

//        $criteria->compare('t.nombre', $this->nombre, true, 'OR');
//        $criteria->compare('t.descripcion', $this->descripcion, true, 'OR');
//        $criteria->compare('tipoCarta.nombre', $this->tipo_carta_id, true, 'OR');

        if ($select != false) {
            $criteria->condition = 'edades.id=:StatusID';
            $criteria->params = array(':StatusID' => $select);
        }
        if (isset($_GET['dropDownStatus']) && $_GET['dropDownStatus'] != 'empty') {
            $criteria->condition = 'edades.id=:StatusID';
            $criteria->params = array(':StatusID' => $_GET['dropDownStatus']);
        }
        if (isset($_GET['CartaNutricional'])) {
            $criteria->compare('tipoCarta.id', $_GET['CartaNutricional'], false, 'AND');
        }
//        $criteria->compare('edades.tiempo', $this->edad, true, 'OR');
        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
        ));
    }

    /**
     * Function busca el menu al que pertenece 
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param type $id id de la cartaNutricional
     * @return String  descripcion del tiempo de la edad
     */
    public function de_edad_id($id) {
        $command = Yii::app()->db->createCommand();
        $command->select("ca.*")
                ->from("carta_nutricional cn")
                ->join("carta_alimentos ca", "cn.id = ca.carta_nutricional_id")
                ->where("ca.edades_id=:id", array(":id" => "$id"));
        return $command->queryAll();
    }

    /**
     * Busca los alimentos que corresponden al menu seleccionado deacuerdo al
     * tipo de variante y lo presenta atraves de un arreglo asignado al tiempo
     * de comida 
     * @author Sofía Mejía <asmejia@utn.edu.ec>
     * @param  $model el modelo de CartaNutricional seleccionado
     * @param int $id_menu el id del menu
     * @return array con los alimentos asignados a un tiempo de comida
     */
    public function asignar_Menu_Tiempo_Comida($model, $id_menu) {
        $menu = array();
        $comida = TipoCarta::model()->findByPk((int) $model->tipo_carta_id);
        $comida = $comida['oldValues']['nombre'];
        $tiempoComida = Util::setFormatoVarianteComida($comida);
        $valoresAlimentos = CartaAlimentos::model()->de_menu_id($id_menu)->findAll();
        $cartaAlimentos = array();
        $aux = array();
        if (isset($valoresAlimentos)) {
            foreach ($valoresAlimentos as $value) {
                $variante = $value->variantesCarta;
                $alimento = $value->alimentos;
                if (isset($alimento) && isset($variante)) {
                    $tipo = $variante['oldValues']['representacion'];
                    $tipoVariante = Util::setFormatoTipoVariante($tipo);
                    $aux[$tipoVariante] = $alimento['oldValues']['nombre'] . " " . $alimento['oldValues']['descripcion'];
                    $cartaAlimentos[$value->id] = $aux;
                }
                $aux = array();
            }
            $menu[$tiempoComida] = $cartaAlimentos;
        }
        return $menu;
    }

    /**
     * Permite validar o guardar el alimento de un menu deacuerdo al primer atributo
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param int $idCartaNut si es null, valida, casocontrario guarda
     * @param array $value
     * @param int $variante
     * @param array $_POST_CartaAlimentos
     * @return model
     */
    public function validateOrSaveAlimentoMenuSemanal($idCartaNut = null, $value, $variante, $_POST_CartaAlimentos) {//todo
        $model = new CartaAlimentos;
        $model->carta_nutricional_id = $idCartaNut != null ? $idCartaNut : 1;
        $model->edades_id = $_POST_CartaAlimentos['edades_id'];
        $model->alimentos_id = $value['alimentos_id'];
        $model->cantidad = $value['cantidad'];
        $model->medida = $value['medida'];
        $model->variantes_carta_id = $variante;
        $model->nombreTipoCarta = $_POST_CartaAlimentos['nombreTipoCarta'];
        $model->descripcionTipoCarta = $_POST_CartaAlimentos['descripcionTipoCarta'];
        $model->tipoCarta = $_POST_CartaAlimentos['tipoCarta'];
        return $idCartaNut != null ? $model->save() : $model->validate();
    }

    /**
     * Busca si la tabla del modelo no esta vacia
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     * @return query
     */
    public function contarDatos() {
        $command = Yii::app()->db->createCommand()
                ->select("count(id) as total")
                ->from($this->tableName());
        $result = $command->queryAll();
        return $result[0]['total'];
    }

//    public function behaviors() {
//        return array(
//            'ActiveRecordLogableBehavior' => array('class' =>
//                'application.behaviors.ActiveRecordLogableBehavior'),
//        );
//    }

}
